package com.ruoyi.position.service.impl;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; //添加
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.control.domain.RyssHistory;
import com.ruoyi.control.dto.RYJZDto;
import com.ruoyi.control.dto.RyxxNumDto;
import com.ruoyi.control.mapper.RyssHistoryMapper;
import com.ruoyi.position.domain.Ryjz;
import com.ruoyi.position.domain.Ryqy;
import com.ruoyi.position.domain.Ryss;
import com.ruoyi.position.mapper.RyjzMapper;
import com.ruoyi.position.mapper.RyqyMapper;
import com.ruoyi.position.mapper.RyssMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.position.mapper.RyxxMapper;
import com.ruoyi.position.domain.Ryxx;
import com.ruoyi.position.service.IRyxxService;

/**
 * 人员定位-人员信息Service业务层处理
 *
 * @author hcc
 * @date 2024-10-31
 */
@Service
public class RyxxServiceImpl extends ServiceImpl<RyxxMapper, Ryxx> implements IRyxxService //修改
{
    @Autowired
    private RyxxMapper ryxxMapper;
    @Autowired
    private RyjzMapper ryjzMapper;
    @Autowired
    private RyssHistoryMapper ryssHistoryMapper;
    @Autowired
    private RyssMapper ryssMapper;
    @Autowired
    private RyqyMapper ryqyMapper;
    /**
     * 查询人员定位-人员信息
     *
     * @param personId 人员定位-人员信息主键
     * @return 人员定位-人员信息
     */
    @Override
    public Ryxx selectRyxxByPersonId(String personId)
    {
        return ryxxMapper.selectRyxxByPersonId(personId);
    }

    /**
     * 查询人员定位-人员信息列表
     *
     * @param ryxx 人员定位-人员信息
     * @return 人员定位-人员信息
     */
    @Override
    public List<Ryxx> selectRyxxList(Ryxx ryxx)
    {
        return ryxxMapper.selectRyxxList(ryxx);
    }

    /**
     * 新增人员定位-人员信息
     *
     * @param ryxx 人员定位-人员信息
     * @return 结果
     */
    @Override
    public int insertRyxx(Ryxx ryxx)
    {
        return ryxxMapper.insertRyxx(ryxx);
    }

    /**
     * 修改人员定位-人员信息
     *
     * @param ryxx 人员定位-人员信息
     * @return 结果
     */
    @Override
    public int updateRyxx(Ryxx ryxx)
    {
        return ryxxMapper.updateRyxx(ryxx);
    }

    /**
     * 批量删除人员定位-人员信息
     *
     * @param personIds 需要删除的人员定位-人员信息主键
     * @return 结果
     */
    @Override
    public int deleteRyxxByPersonIds(String[] personIds)
    {
        return ryxxMapper.deleteRyxxByPersonIds(personIds);
    }

    /**
     * 删除人员定位-人员信息信息
     *
     * @param personId 人员定位-人员信息主键
     * @return 结果
     */
    @Override
    public int deleteRyxxByPersonId(String personId)
    {
        return ryxxMapper.deleteRyxxByPersonId(personId);
    }

    @Override
    public Ryxx selectRyxxByPersonName(String personName) {
        return ryxxMapper.selectRyxxByPersonName(personName);
    }

    /**
     * 查询人员定位-人员信息列表
     * @return
     */
    @Override
    public List<Ryxx> getList() {
        return ryxxMapper.getList();
    }

    @Override
    public RyxxNumDto selectRyxxListNum(Ryxx ryxx) {
        // 获取当前时间的 Calendar 实例
        Calendar calendar = Calendar.getInstance();
        Date nowTime=calendar.getTime();
        // 计算 10 分钟前的时间
        calendar.add(Calendar.MINUTE, -10);
        Date tenMinutesAgo = calendar.getTime();
        List<Ryjz> list = ryjzMapper.selectRyjzList(new Ryjz());
        List<RYJZDto> listDto =list.stream().map(item ->{
            RYJZDto ryjzDto=new RYJZDto();
            BeanUtils.copyProperties(item,ryjzDto);
            List<Ryjz> ryjzList= ryjzMapper.selectRyjzNum(item);
            ryjzDto.setNum(String.valueOf(ryjzList.size()));
            return ryjzDto;
        }).collect(Collectors.toList());
        RyxxNumDto ryxxNumDto=new RyxxNumDto();
        long totalVerifiedPersonNumber = listDto
                .stream()
                .mapToLong(item -> Long.parseLong(item.getNum())) // 将 Long 转换为 long 的 Stream
                .sum();
        ryxxNumDto.setTotal1(String.valueOf(totalVerifiedPersonNumber));
        ryxxNumDto.setTotal0(String.valueOf(totalVerifiedPersonNumber));
        List<Ryss> ryssList=ryssMapper.selectRyssListALLSS(new Ryss());
        ryxxNumDto.setTotal2(String.valueOf(ryssList.stream().filter(item1 -> "是".equals(item1.getIsLeader()) && item1.getUpdateTime().before(nowTime)
                && item1.getUpdateTime().after(tenMinutesAgo))
                .collect(Collectors.toList()).size()));
        return ryxxNumDto;
    }
}
